
#ifndef _TTG_MATH_VEC4X_
#define _TTG_MATH_VEC4X_
#include "Common/Definitions.h"

#include "vec3.h"
#include "vec4.h"

namespace ttg
{
	namespace math
	{
		class vec4f :public vec4<float>
		{
			public:
				inline vec4f()
					:vec4<float>()
						{ /*nothing*/ }

				inline vec4f(const vec3<float> &vec)
					:vec4<float>(vec)
						{ /*nothing*/ }

				inline vec4f(const vec4<float> &vec)
					:vec4<float>(vec)
						{ /*nothing*/ }

		#ifdef MICROSOFT_DIRECTX

				inline vec4f(const D3DXVECTOR3 &vec)
					:vec4<float>(vec)
						{ /*nothing*/ }

				inline vec4f(const D3DXVECTOR4 &vec)
					:vec4<float>(vec)
						{ /*nothing*/ }

		#endif

				inline vec4f(float x, float y, float z, float w)
					:vec4<float>(x, y, z, w)
						{ /*nothing*/ }

				inline operator vec4<double>() const
				{
					return vec4<double>(x, y, z, w);
				}
				static const vec4f ZERO;
		};

		class vec4d :public vec4<double>
		{
			public:
				inline vec4d()
					:vec4<double>()
						{ /*nothing*/ }

				inline vec4d(const vec3<double> &vec)
					:vec4<double>(vec)
						{ /*nothing*/ }

				inline vec4d(const vec4<double> &vec)
					:vec4<double>(vec)
						{ /*nothing*/ }

		#ifdef MICROSOFT_DIRECTX

				inline vec4d(const D3DXVECTOR3 &vec)
					:vec4<double>(vec)
						{ /*nothing*/ }

				inline vec4d(const D3DXVECTOR4 &vec)
					:vec4<double>(vec)
						{ /*nothing*/ }

		#endif

				inline vec4d(double x, double y, double z, double w)
					:vec4<double>(x, y, z, w)
						{ /*nothing*/ }

				inline operator vec4<float>() const
				{
					return vec4<float>((float)x, (float)y, (float)z, (float)w);
				}
			static const vec4d ZERO;
		};
	}
}

#endif
